package inherited;

public class Test {
    public static void main(String[] args){
        Student s1=new Student(23,"孙悟空","1380807051104","六年级");
        s1.eat();
        s1.study();
        s1.sleep();
        System.out.println(s1.toString());
        Student s2=new Student();//实例化对象
        s2.setAge(19);//引用私有成员公共方法并赋值
        System.out.println(s2.toString());
        System.out.println(s2.getAge()+"--------"+s2.getName());
        /**
         * 关键是看引用的（实例化的）对象是谁，引用对象的谁，调用的方法就是谁的
         */
        Person p=s1;//里氏代换： 父类引用子类对象，且只可以父类引用子类对象，反之不行
        //p.study()   不存在
        System.out.println(p.toString());//toString()为子类的方法，
        /*  Person p2=new Person();//父类引用父类对象
        //出错的原因是在Person中写了抽象类，将其与父类的abstract注释即可
        p2.setAge(56);p2.setName("太上老君");
        System.out.println(p2.toString());//toString是父类的方法  */

        Person p3=new Student();
        Person p4=new Employee();
        p3.study();
        p4.study();

        Student p1=new Student();//子类实例化时会自动调用父类默认的构造方法
        p1.study();

    }
}
